python数据结构之列表(list) 您所在的位置:网站首页 列表 长度 python数据结构之列表(list)

python数据结构之列表(list)

2024-02-06 22:48| 来源: 网络整理| 查看: 265

列表

1.创建方式

[] 或 list()

a = [] # 表示一个空列表 a = [1, 2, 3, 4, 5] a

   [1, 2, 3, 4, 5]

list("hello world")

   ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

l = list("hello world")#l列表长度为11, 小标从0到10 l[1]

   'e'

l[10]

   'd'

l[-1] # 逆序取值 在数值前面加上负号,表示逆序取值

   'd'

2.列表的切片功能

l[0:5] # 表示下标从0开始遍历到4, 左闭右开

   ['h', 'e', 'l', 'l', 'o']

l[开始:结尾:步长] # 步长可以省略,默认值为1

l[:5]#表示从最开始切片到4

   ['h', 'e', 'l', 'l', 'o']

l[5:] # 表示从5开始切片到最后

   [' ', 'w', 'o', 'r', 'l', 'd']

l[:] #表示遍历所有

   ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

l[::2] # 步长为2,遍历

   ['h', 'l', 'o', 'w', 'r', 'd']

l[::-1] #步长为-1, 表示倒序遍历,实现列表的翻转

   ['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']

3.向列表中添加元素

# attend 表示在列表最后添加一个元素 number = [1, 2, 3, 4, 5] number.append(6) number

   [1, 2, 3, 4, 5, 6]

# 使用extend()向列表末尾添加多个元素 number = [1, 2, 3, 4, 5, 6] number.extend([7, 8]) number

   [1, 2, 3, 4, 5, 6, 7, 8]

# 在列表的任意位置插入元素 number.insert(0, 0) #第一个参数表示列表中的位置,第二个参数表示要插入的值 number

   [0, 0, 1, 2, 3, 4, 5, 6, 7, 8]

4.从列表中获取元素

# 交换位置 name = ["鸡蛋", "鸭蛋", "鹅蛋", "鸟蛋"] name[0], name[3] = name[3], name[0] name

   ['鸟蛋', '鸭蛋', '鹅蛋', '鸡蛋']

name[0]

   '鸟蛋'

列表赋值的骚操作

L1 = [1, 2, 3] a, b, c = L1 print(a, b, c)

   1 2 3

5.从列表中删除元素

有三种方法:remove()、del、pop()

# .remove(x)函数,并不需要知到x在哪个位置,如果想要删除的东西没在列表中的话,就会报错 # remove()函数不能指定删除某个位置的值 name.remove("鹅蛋") name

   ['鸟蛋', '鸭蛋', '鸡蛋']

# del函数 del name[0] name

   ['鸭蛋', '鸡蛋']

# 删除整个列表,在del 后面加上列表名字即可 del name # 再执行name语句便会报错 # .pop()默认弹出列表中最后一个数 name = ["鸡蛋", "鸭蛋", "鹅蛋", "鸟蛋"] name.pop()

   '鸟蛋'

# 也可以在pop()中加入索引值 name = ["鸡蛋", "鸭蛋", "鹅蛋", "鸟蛋"] name.pop(2)

   '鹅蛋'

name

   ['鸡蛋', '鸭蛋', '鸟蛋']

6.列表比较

# list比较大小是从第一个元素开始,一个一个进行比较,只要有了结果就会马上返回值 list1 = [123] list2 = [456] list1 > list2

   False

list1 = [123, 789] list2 = [456, 321] list1 > list2

   False

7.列表的 * + 运算

# 在列表中,我们可以通过+号,实现俩个列表的拼接 list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = list1 + list2 list3

   [1, 2, 3, 4, 5, 6]

#也可以使用extend()函数实现列表的拼接 list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) list1

   [1, 2, 3, 4, 5, 6]

# *(乘号)表示重复操作符,能使列表复制 list1 = [1, 2, 3] list1 *= 3 list1

   [1, 2, 3, 1, 2, 3, 1, 2, 3]

8.二维列表

# 如何访问二维列表中的数字 list1 = [1, 2, [3, 4, 5],6] list1[2] # 也表示一个列表

   [3, 4, 5]

# 因为list1[2]可以看做是一个列表,所以我们可以通过对list1[2]的下标进行访问 list1[2][0]

   3

list1[2][1]

   4

8.列表中的in 和 not in

list1 = [1, 2, 3, 4] 1 in list1

   True

5 in list1

   False

5 not in list1

   True

# 对于二维数组,in 和 not in 只能判断一个层次的成员关系,如果想要判断二维数组中的元素 #是否存在,需要进入下一层次中进行访问 list1 = [1, 2, [3, 4], 5] 3 in list1

   False

3 in list1[2]

   True

9.列表中的几个函数

dir(list) # 查看列表有多少该可以使用的函数 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] # len()函数用来返回列表的长度 list1 = [1, 2, 3, 4, 5] len(list1) 5 # count()用来计算一个数在列表中出现的次数 list1 = [1, 2, 1, 2, 1, 3, 4] list1.count(1)

   3

# index()函数会返回一个数在列表中的位置 list1.index(4)

   6

list1.index(1)# 这里返回的是第一个1出现的位置

   0

# 我们可以通过限制范围来查找下一个值 start = list1.index(1) + 1 end = len(list1) list1.index(1, start, end)

   2

# reserve()方法的作用是将整个列表翻转 list1 = [1, 2, 3, 4, 5, 6] list1.reverse() list1

   [6, 5, 4, 3, 2, 1]

# sort() 对列表中的元素进行从小到大排序 list1.sort() list1

   [1, 2, 3, 4, 5, 6]

深拷贝与浅拷贝

a = [1, 2, 3] b = a a[0] = 5 a

   [5, 2, 3]

b

   [5, 2, 3]

我们发现当我们改变a的值时,b也会跟着改变,原因是,a与b指向了同一个内存单元, 当内存单元中的值发生改变时,所有指向这个内存单元的变量也会跟着改变

a = [1, 2, 3] b = a[:] a[0] = 5 a

   [5, 2, 3]

b

   [1, 2, 3]

当a将自己切片所获得的值给b时,由于b并没有和a指向同一片内存单元,只是a将自己内存单元的东西 复制给了b所在的内存单元,所以对a内存单元的值进行改变时,并不会改变b中值

# 浅拷贝(copy()),b不会应为a的改变而改变 a = [1, 2, 3] b = a.copy() c = list(a)# c 和 d得到的都是a的返回值,并没有指向a所在的地址,所以都属于浅拷贝 d = a[:] a[0] = 5 a

   [5, 2, 3]

b

   [1, 2, 3]

c

   [1, 2, 3]

d

   [1, 2, 3]

a = [1, 2, [3, 4], 5] b = a.copy() a[1] = 6 a[2][0] = 7 a

   [1, 6, [7, 4], 5]

b

   [1, 2, [7, 4], 5]

我们发现通过改变a的值,b中一维数组中的数并没有发生改变,但二维数组中的数发生了改变 因为我们copy的时候,将二维数组的地址也进行了copy所以,a与b的二维数组是指向了同一个内存单元,当我们对a的二维数组中的值进行改变时,b中二维数组中的值也会随之改变

# 深拷贝(deepcopy()) 通过深拷贝,对a中二维数组中的值进行改变时, # b中二维数组中值不会再发生变化 import copy a = [1, 2, 3, [1, 2, 3]] b = copy.deepcopy(a) a[3][0] = 4 a

   [1, 2, 3, [4, 2, 3]]

b

   [1, 2, 3, [1, 2, 3]]

# copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象内部的子对象 import copy a = [1, 2, 3, [1, 2, 3]] b = copy.copy(a) a[3][1] = 0 a[1] = 6 a

   [1, 6, 3, [1, 0, 3]]

b

   [1, 2, 3, [1, 0, 3]]



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有